package controllers

import (
	"encoding/json"
	"time"

	"github.com/garyburd/redigo/redis"
)

var (
	// 定义常量
	RedisClient *redis.Pool
	REDIS_HOST  string
	REDIS_DB    int
)

func init() {
	// 从配置文件获取redis的ip以及db
	REDIS_HOST = "127.0.0.1:6379"
	REDIS_DB = 1
	// 建立连接池
	RedisClient = &redis.Pool{
		// 从配置文件获取maxidle以及maxactive，取不到则用后面的默认值
		MaxIdle:     2,
		MaxActive:   -1,
		IdleTimeout: 0 * time.Second,
		Dial: func() (redis.Conn, error) {
			c, err := redis.Dial("tcp", REDIS_HOST)
			if err != nil {
				return nil, err
			}
			// 选择db
			c.Do("SELECT", REDIS_DB)
			return c, nil
		},
	}

}

func GetRedisByKey(key string) (map[string]interface{}, error) {
	// 取json数据
	// 先声明imap用来装数据
	var imap map[string]interface{}
	rs := RedisClient.Get()

	// json数据在go中是[]byte类型，所以此处用redis.Bytes转换
	value, err := redis.Bytes(rs.Do("GET", key))

	if err != nil {
		rs.Close()
		return imap, err
	}
	// 将json解析成map类型
	errShal := json.Unmarshal(value, &imap)
	if errShal != nil {
		rs.Close()
		return imap, errShal
	}
	rs.Close()
	return imap, nil
}

func SetRedisBuyKey(key string, data map[string]interface{}) error {
	rs := RedisClient.Get()
	// 将map转换成json数据

	value1, _ := json.Marshal(data)
	// 存入redis
	n, err := rs.Do("SETNX", key, value1)

	if n == int64(1) {
		rs.Do("EXPIRE", key, 20)
		rs.Close()
		return nil
	} else {
		rs.Close()
		return err
	}

}
